from rest_framework.authentication import BaseAuthentication
from apps.teachers.models import Teacher


# 自定义身份认证类 => 根据请求头token提取用户模型对象
class CustomAuthentication(BaseAuthentication):
    """
    自定义认证类
    return None 交给下一个认证方法继续认证
    return (user, None) 结束认证并返回认证对象,固定返回格式(用户模型对象, None)
    """

    def authenticate(self, request):
        # Django 框架会将 header 名称全部转换为大写; 其次DRF接收到的header名称都会在前面加上 HTTP_ 前缀
        token = request.META.get('HTTP_AUTHORIZATION')
        user = Teacher.checkout_user_by_token(token)
        if user:
            return user, None
        return None
